package fiuba.algo3.gpschallenge.gui;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JList;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import fiuba.algo3.gpschallenge.Controlador.Controlador;
import fiuba.algo3.gpschallenge.modelo.Juego;

import java.util.List;

import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;
import javax.swing.JButton;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JScrollBar;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.ListSelectionModel;
import javax.swing.DropMode;

import java.awt.SystemColor;

@SuppressWarnings("serial")
public class PanelElegirUsuario extends JPanel {
	private Agregable interfazAgregable;
	private JList listaJugadoresMostrar;
	private Controlador control;
	private Juego modelo;
	private Object seleccion;
	private JTextField campoJugadorSeleccionado;
	private JScrollPane scrollPane;
	private final int ALTO = 350;
	private final int ANCHO = 700;
	

	public PanelElegirUsuario(Agregable interfazM, Juego modelo, Controlador control) {
		setBackground(SystemColor.window);
		setLayout(null);
		interfazAgregable = interfazM;
		this.modelo = modelo;
		this.control = control;
		setPreferredSize(new Dimension(ANCHO, ALTO));
		//modelo.jugadorNuevo();
		//modelo.setNombreJugador();
		
		//Recupero La lista de jugadores a traves de ranking.
		modelo.cargarRanking();
		//modelo.getRanking();
						
		//armo la lista de los Nombres del Ranking.
		String[] listaDeJugadoresRecuperada = modelo.getRanking().devolverNombresDeJugadoresEnRanking();

		
		listaJugadoresMostrar = new JList(listaDeJugadoresRecuperada);
		listaJugadoresMostrar.setBackground(SystemColor.inactiveCaptionBorder);
		listaJugadoresMostrar.setFont(new Font("Tahoma", Font.PLAIN, 15));
		listaJugadoresMostrar.setBounds(0, 64, 136, 112);
		add(listaJugadoresMostrar);
		
		JButton botonSeleccionar = new JButton("Seleccionar");
		botonSeleccionar.setBackground(SystemColor.activeCaption);
		botonSeleccionar.setForeground(Color.WHITE);
		botonSeleccionar.setFont(new Font("Arial Black", Font.BOLD, 12));
		botonSeleccionar.addActionListener(new botonSeleccionarListener());
		botonSeleccionar.setBounds(401, 117, 126, 30);
		add(botonSeleccionar);
		
		campoJugadorSeleccionado = new JTextField();
		campoJugadorSeleccionado.setHorizontalAlignment(SwingConstants.CENTER);
		campoJugadorSeleccionado.setBackground(SystemColor.inactiveCaptionBorder);
		campoJugadorSeleccionado.setEditable(false);
		campoJugadorSeleccionado.setBounds(401, 70, 126, 36);
		campoJugadorSeleccionado.setColumns(10);
		add(campoJugadorSeleccionado);
		
		JLabel lblElegirUsuaro = new JLabel("Elegir Usuario");
		lblElegirUsuaro.setFont(new Font("Times New Roman", Font.BOLD, 32));
		lblElegirUsuaro.setHorizontalAlignment(SwingConstants.CENTER);
		lblElegirUsuaro.setBounds(187, 11, 245, 48);
		add(lblElegirUsuaro);
		
		JScrollPane scrollPane = new JScrollPane(listaJugadoresMostrar);
		scrollPane.setBounds(202, 70, 179, 159);
		add(scrollPane);
		
		JButton botonVolver = new JButton("Volver");
		botonVolver.setBackground(SystemColor.activeCaption);
		botonVolver.setForeground(SystemColor.window);
		botonVolver.setFont(new Font("Arial Black", Font.BOLD, 12));
		botonVolver.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				cargarPanelPrincipal();		
			}
		});
		botonVolver.setBounds(241, 268, 110, 30);
		add(botonVolver);
		
		JButton botonAceptar = new JButton("Aceptar");
		botonAceptar.setForeground(Color.WHITE);
		botonAceptar.setFont(new Font("Arial Black", Font.BOLD, 12));
		botonAceptar.setBackground(SystemColor.activeCaption);
		botonAceptar.setBounds(417, 169, 93, 36);
		add(botonAceptar);
		botonAceptar.addActionListener (new botonAceptarListener());
		
		
		
		
	}

	private void cargarPanelPrincipal() {
		PanelInicial panelInicial = new PanelInicial(this.interfazAgregable, modelo, control);
		interfazAgregable.limpiarVentana();
		interfazAgregable.agregarComponente(panelInicial, BorderLayout.CENTER);
		
	}

	private void mostrarJugadorSeleccionado() {
		campoJugadorSeleccionado.setText((String) listaJugadoresMostrar.getSelectedValue());
	}
	
	private void cargarDatosDeJugadorSeleccionado() {	
		modelo.inicializarJugadorViejo();
	}
	
	private void prepararEstadoJugador(){
		modelo.inicializarJuego();
		modelo.setNombreJugador (campoJugadorSeleccionado.getText());
	}
	
	private void cargarMenuDeUsuario() {
		interfazAgregable.limpiarVentana();
		
		PanelMenuDeUsuario menuDeUsuario = new PanelMenuDeUsuario(this.interfazAgregable, this.modelo, this.control);
		PanelSuperiorMenuUsuario panelSuperiorMenu = new PanelSuperiorMenuUsuario(this.interfazAgregable, this.modelo, this.control);
		interfazAgregable.agregarComponente(panelSuperiorMenu, BorderLayout.NORTH);
		interfazAgregable.agregarComponente(menuDeUsuario, BorderLayout.CENTER);	
	}
	
	
	
	class botonAceptarListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			if (campoJugadorSeleccionado.getText().length() > 0){
				cargarDatosDeJugadorSeleccionado();
				cargarMenuDeUsuario();
			}	
		}
	}
	
	class botonSeleccionarListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			mostrarJugadorSeleccionado();
			prepararEstadoJugador();	
		}
	}
	
	
}

